#!/usr/bin/env python
# -*- coding:utf-8 -*-

"""
@author zyx
@since 2022/2/16 22:11
@file: stock_kline_scraper.py
@desc: 股票周k爬取
@reference: https://juejin.cn/post/7058816101961957384
"""

import requests
import json
from prettytable import PrettyTable

head = {  # 伪装UA信息
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}


def get_request(code):
    # 股票市场: 上海市场是 1, 深圳市场为 0
    secid = f'1.{code}' if code.startswith('6') else f'0.{code}'
    url = 'http://20.push2his.eastmoney.com/api/qt/stock/kline/get'
    params = {
        # 需要查询的股票代码，需要加上前缀 上海市场是 1, 深圳市场为 0
        'secid': secid,
        # 类似于 token, 可以不传
        # 'ut': 'fa5fd1943c7b386f172d6893dbfba10b',
        'fields1': 'f1,f2,f3,f4,f5,f6',
        # fields2 为 日期 开盘价 收盘价 最高价 涨跌幅 价格之类的
        'fields2': 'f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61',
        'klt': '102',
        # 是否复权 0 不复权 1 前复权 2 后复权
        'fqt': '0',
        # 查询数据的开始时间和结束时间，格式为yyyymmdd,结束时间默认为2050年
        # 'beg': '20220101',
        'beg': '00000000',
        'end': '20500101',
        'lmt': '1000000'
    }
    return requests.get(url=url, headers=head, params=params).text


def parse_res(resp):
    json_body = json.loads(resp)
    kline_data = json_body['data']['klines']
    title_list = ['时间', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
    # pip install PTable
    pt = PrettyTable()
    pt.field_names = title_list
    for data in kline_data:
        pt.add_row(data.split(','))
    print(pt)


if __name__ == '__main__':
    res = get_request('600690')
    parse_res(res)
